package tcp

import (
	"gse/server"
	tcpBackend "gse/transport/tcp"
	"net"
	"time"
)

type TCPServer struct {
	*server.ServerBase
}

type TCPServerConfig struct {
	BindAddress string
	*tcpBackend.TCPTransportConfig
	SesConfig *server.SessionConfig
}

func NewDefaultTCPServerConfig() *TCPServerConfig {
	cfg := &TCPServerConfig{
		BindAddress:        "127.0.0.1:3133",
		TCPTransportConfig: tcpBackend.NewDefaultTCPTransportConfig(),
		SesConfig: &server.SessionConfig{
			ReqProcessTimeout: time.Millisecond * server.DefaultReqProcessTimeout,
			ReqWaitTimeout:    time.Millisecond * server.DefaultSessionReqWaitTimeout,
		},
	}
	return cfg
}
func NewTCPServer(cfg *TCPServerConfig) *TCPServer {
	bindAddr, err := net.ResolveTCPAddr("tcp4", cfg.BindAddress)
	if err != nil {
		panic(err)
	}
	listener, err := net.ListenTCP("tcp4", bindAddr)
	if err != nil {
		panic(err)
	}

	if cfg.TCPTransportConfig == nil {
		cfg.TCPTransportConfig = tcpBackend.NewDefaultTCPTransportConfig()
	}

	s := &TCPServer{
		server.NewServerBase(tcpBackend.NewTcpTransport(listener, cfg.TCPTransportConfig), cfg.SesConfig),
	}

	s.ServerBase.Init()
	return s
}
